package com.bdqn.easybuy1.utils;

import com.bdqn.easybuy1.entities.Product;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

@Getter
@Setter
public class ShoppingCart implements Serializable {
    /**
     * 购物车中的所有商品
     */
    private List<ShoppingCartItem> items = new ArrayList<ShoppingCartItem>();

    /**
     * 购物车中所有商品的总价
     */
    private Double sum;

    /**
     * 把商品加入购物车
     *
     * @param product  加入购物车的商品
     * @param quantity 加入购物车的商品数量
     * @return
     */
    public ReturnResult addItem(Product product, Integer quantity) {
        ReturnResult result = new ReturnResult();
        int flag = 0;
        for (int i = 0; i < items.size(); i++) {
            //判断购物车中是否已有此商品，如果有则累计数量
            if ((items.get(i).getProduct().getId()).equals(product.getId())) {
                if (items.get(i).getQuantity() + quantity > product.getStock()) {
                    return result.returnFail("商品数量不足");
                } else {
                    items.get(i).setQuantity(items.get(i).getQuantity() + quantity);
                    flag = 1;
                }
            }
        }
        if (quantity > product.getStock()) {
            return result.returnFail("商品数量不足");
        }
        // flag是0表示新商品加入购物车，1表示商品已经存在，更改商品的数量
        if (flag == 0) {
            items.add(new ShoppingCartItem(product, quantity));
        }
        return result.returnSuccess();
    }

    /**
     * 从购物车中删除一个商品
     *
     * @param index
     */
    public void removeItem(int index) {
        items.remove(index);
    }

    /**
     * 修改购物车中商品的数量
     *
     * @param index
     * @param quantity
     */
    public void modifyQuantity(int index, Integer quantity) {
        items.get(index).setQuantity(quantity);
    }

    /**
     * 计算购物车中商品的总价
     *
     * @return
     */
    public float getTotalCost() {
        float sum = 0;
        for (ShoppingCartItem item : items) {
            sum = sum + item.getCost();
        }
        return sum;
    }
}
